package com.itheima.game4;

import javax.swing.*;
import java.util.Random;

/*
1：新建一个模块：itheima-picture-puzzle；在模块的src下新建一个包com.itheima

2：在com.itheima这个包下定义类：PictureFrame，继承自JFrame

3：在PictureFrame类中编写无参构造方法，在构造方法中调用两个方法：

第一个方法：initFrame()，用于窗体的基本设置

第二个方法：setVisible(true)，用于设置窗体可见

4：在initFrame()方法中编写代码，进行窗体的基本设置

窗体大小

窗体标题

窗体居中

窗体关闭时退出应用程序

窗体位于其他窗口之上

取消窗体默认布局




* */
public class PictureFrame extends JFrame {

    //定义二维数组,表示图片的编号--->用格式1---->简化格式-->静态赋值
    //对应封装思想
   private int[][] datas = {
            {1, 2, 3, 4},
            {5, 6, 7, 8},
            {9, 10, 11, 12},
            {13, 14, 15, 0}
    };//用0替代掉16
    //空参构造
    public PictureFrame() {
        //用于窗体设置
        initFrame();
        //数组的打乱一定要在图片加载之前
        randomDates();
        //绘制基本组件
        printView();
        //设置窗体可见
        this.setVisible(true);
    }

    //面向对象思想,如果要完成一个功能,就是一个成员方法---------->注意没有static关键字
    public void randomDates(){
        //创建随机数对象
        Random r = new Random();
        //遍历数组
        for (int i = 0; i < datas.length; i++) {
            for (int j = 0; j < datas[i].length; j++) {
                //获取两个随机索引
                int y = r.nextInt(datas.length);
                int x = r.nextInt(datas[i].length);

                //进行数据交换
                int temp = datas[i][j];
                datas[i][j] = datas[x][y];
                datas[x][y] = temp;
            }
        }

    }


    //方法initFrame()
    //用于窗体的基本设置
    public void initFrame() {
        //窗体大小
        this.setSize(960, 565);
        //窗体标题
        this.setTitle("动漫拼图");

        //窗体居中
        this.setLocationRelativeTo(null);

        //窗体关闭时退出应用程序
        this.setDefaultCloseOperation(3);
        //窗体位于其他窗口之上
        this.setAlwaysOnTop(true);
        //取消默认布局
        this.setLayout(null);


    }

    //绘制窗体的基本组件 printView
    //成员方法,功能
   /* 1：定义方法，用于窗体上的组件绘制：paintView()

            2：按照如下组件绘制
            标题图片
            面板图片，存储着将来要移动的图片
            参照图
            上按钮
            左按钮
            下按钮
            右按钮
            求助按钮
            重置按钮

        3：在构造方法中调用paintView()方法*/
    public void printView() {
        //标题组件
        JLabel titleLabel = new JLabel(new ImageIcon("day09\\imgs\\title.png"));
        //设置大小
        titleLabel.setBounds(245, 27, 232, 57);
        //添加到窗体上
        this.add(titleLabel);



        //创建JPanel容器面板 用于拼图的部分
        JPanel imagePanel = new JPanel();
        //设置大小
        imagePanel.setBounds(150, 114, 360, 360);
        //遍历for循环得到所有图片
        for (int i = 0; i < datas.length; i++) {
            for (int j = 0; j < datas[i].length; j++) {
                //通过JLabel加载图片
                JLabel imageLabel = new JLabel(new ImageIcon("day09\\imgs\\" + datas[i][j] + ".png"));
                //设置图片的大小
                imageLabel.setBounds(j * 90, i * 90, 90, 90);
                //将图片加到面板上
                imagePanel.add(imageLabel);
            }
        }
        //将JPanel面板加到窗体上
        this.add(imagePanel);


        //参照图
        JLabel canZhaoLabel = new JLabel(new ImageIcon("day09\\imgs\\canzhaotu.png"));
        //设置大小
        canZhaoLabel.setBounds(574, 114, 122, 121);
        //将图片添加到窗体中
        this.add(canZhaoLabel);

        //上按钮
        JButton shangButton = new JButton(new ImageIcon("day09\\imgs\\shang.png"));
        //设置大小和位置
        shangButton.setBounds(732, 265, 57, 57);
        //将按钮添加到窗体中
        this.add(shangButton);

        //左按钮
        JButton zouButton = new JButton(new ImageIcon("day09\\imgs\\zuo.png"));
        //设置大小和位置
        zouButton.setBounds(650, 347, 57, 57);
        //将按钮添加到窗体中
        this.add(zouButton);

        //下按钮
        JButton xiaButton = new JButton(new ImageIcon("day09\\imgs\\xia.png"));
        //设置大小和位置
        xiaButton.setBounds(732, 347, 57, 57);
        //将按钮添加到窗体中
        this.add(xiaButton);

        //右按钮
        JButton youButton = new JButton(new ImageIcon("day09\\imgs\\you.png"));
        //设置大小和位置
        youButton.setBounds(813, 347, 57, 57);
        //将按钮添加到窗体中
        this.add(youButton);

        //求助按钮
        JButton qiuzhuButton = new JButton(new ImageIcon("day09\\imgs\\qiuzhu.png"));
        //设置大小和位置
        qiuzhuButton.setBounds(626, 444, 108, 45);
        //将该按钮添加到窗体中
        this.add(qiuzhuButton);

        //重置按钮
        JButton chonngzhiButton = new JButton(new ImageIcon("day09\\imgs\\chongzhi.png"));
        //设置按钮大小和位置
        chonngzhiButton.setBounds(786, 444, 108, 45);
        //将按钮添加到窗体中
        this.add(chonngzhiButton);

        //背景图:必须写在最后
        JLabel backgroudLabel = new JLabel(new ImageIcon("day09\\imgs\\background.png"));
        //设置大小和位置
        backgroudLabel.setBounds(0, 0, 968, 530);

    }

}
